package org.snia.exception;

/**
 * 异常抽象类,将错误信息国际化
 * 
 * @author j90004284
 * @version CloudStor CSE Service Platform Subproject, May 31, 2010
 * @see RuntimeException
 * @since v1.0
 */
public class AbstractException
    extends RuntimeException
{

    private static final long serialVersionUID = -7034897190745766939L;

    /**
     * 错误代码,默认为未知错误
     */
    private String errorCode = "UNKNOW_ERROR";

    /**
     * 错误信息中的参数
     */
    private String[] errorArgs = null;

    /**
     * 兼容纯错误信息，不含error code,errorArgs的情况
     */
    private String errorMessage = null;

    /**
     * 默认构造函数
     */
    public AbstractException()
    {
        super();
    }

    /**
     * 错误消息构造方法
     * 
     * @param errorMessage 错误消息
     */
    public AbstractException(String errorMessage)
    {
        super(errorMessage);
        this.errorMessage = errorMessage;
    }

    /**
     * 异常消息构造方法
     * 
     * @param errorMessage 异常消息
     * @param e 异常对象
     */
    public AbstractException(String errorMessage, Exception e)
    {
        super(errorMessage);
        this.errorMessage = errorMessage;
        this
            .setStackTrace(e
                .getStackTrace());
    }

    /**
     * 异常消息构造方法
     * 
     * @param errorMessage 异常消息
     * @param errorCode 错误码
     * @param e 原始异常
     */
    public AbstractException(String errorMessage, String errorCode, Exception e)
    {
        super(errorMessage);
        this.errorMessage = errorMessage;
        this.errorCode = errorCode;
        this
            .setStackTrace(e
                .getStackTrace());
    }

    /**
     * 错误码/错误消息构造函数
     * 
     * @param errorCode 错误码
     * @param errorArgs 错误码
     */
    public AbstractException(String errorCode, String[] errorArgs)
    {
        this.errorCode = errorCode;
        this.errorArgs = errorArgs;
    }

    /**
     * 获得出错信息
     * 
     * @return 出错信息
     */
    public String getErrorMessage()
    {
        // 如果errorMessage不为空,直接返回出错信息.
        if (errorMessage != null)
        {
            return errorMessage;
        }
        return null;
    }

    /**
     * 设置错误信息
     * 
     * @param errorMessage 错误信息
     */
    public void setErrorMessage(String errorMessage)
    {
        this.errorMessage = errorMessage;
    }

    /**
     * 获得错误码
     * 
     * @return 错误码
     */
    public String getErrorCode()
    {
        return errorCode;
    }

    /**
     * 设置错误码
     * 
     * @param errorCode 错误码
     */
    public void setErrorCode(String errorCode)
    {
        this.errorCode = errorCode;
    }

    /**
     * 获得错误信息参数
     * 
     * @return errorArgs 错误信息参数
     */
    public String[] getErrorArgs()
    {
        return errorArgs;
    }

    /**
     * 设置错误信息参数
     * 
     * @param errorArgs 错误信息参数
     */
    public void setErrorArgs(String[] errorArgs)
    {
        this.errorArgs = errorArgs;
    }

}
